package com.aizuda.boot.modules.business.negotiation.annotation;

import java.lang.annotation.*;

/**
 * 自动创建协商数据注解
 * 用于标记需要在方法执行成功后自动创建合同协商相关数据的方法
 * 
 * @author yangshen
 * @since 2025-07-02
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CreateNegotiationData {
    
    /**
     * 合同ID的参数名或SpEL表达式
     * 例如：
     * - "contractId" 表示从方法参数中获取名为contractId的参数
     * - "#dto.contractId" 表示从参数dto对象的contractId属性获取
     * - "#result.contractId" 表示从方法返回值的contractId属性获取
     */
    String contractIdSource() default "#dto.contractId";
    
    /**
     * 申请人ID的参数名或SpEL表达式
     * 例如：
     * - "userId" 表示从方法参数中获取名为userId的参数
     * - "#flowCreator.createId" 表示从flowCreator参数的createId属性获取
     * - "T(com.aizuda.service.web.UserSession).getLoginInfo().getUserId()" 表示调用静态方法获取用户ID
     */
    String applicantIdSource() default "T(com.aizuda.service.web.UserSession).getLoginInfo().getUserId()";
    
    /**
     * 是否启用（可用于动态控制）
     */
    boolean enabled() default true;
    
    /**
     * 描述信息
     */
    String description() default "";
} 